package DataStr.ex02;

import java.util.Stack;

public class stack02 {
    //括号问题
    //main
    public static void main(String[]args){
        //1,写出要判断是字符串
        String sr="(上海长安)())";
        //2，将该字符串输入该方法
        boolean b=match(sr);
        System.out.println(sr+"中的括号匹配为:"+b);
    }
    //match方法
    public static boolean match(String sr){
        //1，创建一个字符串对象（集合）
        Stack<String>sr1=new Stack<>();
        //2，遍历该字符串
        for(int i=0;i<sr.length();i++){
            String sr2=sr.charAt(i)+"";
            //3，判断该字符串中是否有左括号，如果有则存入栈
            if(sr2.equals("(")){
                sr1.push(sr2);
            } else if (sr2.equals(")")) {
                //EmptyStackException异常的原因是在弹出栈元素时没有检查栈是否为空
                if (sr1.isEmpty()){
                    try {
                        return false;
                    }catch(Exception e){
                        System.out.println("栈为空");
                        e.printStackTrace();
                    }
                }
                String a=sr1.pop();
                if(a==null){
                    return false;
                }
            }
            //4，判断该字符串是否有右括号，有则将栈中的左口号弹出一个，并判断弹出内容是否为空
        }
        if(sr1.size()==0){
            return true;
        }else{
            return false;
        }
        //5，当该字符串遍历结束时，判断栈中是否还有数据，有则false
    }

}
